#列表生成式

#要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))：

testcreat=list(range(1,11))
print("列表生成式：range",testcreat)

#[1x1,2x2,3x3....,10x10]
L=[]
for x in range(1,11):
    L.append(x*x)

print(L)

#循环太麻烦
testlist=[x*x for x in range(1,11)]
print(testlist)
#两层循环，生成全排列
testlist=[m+n for m in 'ABC' for n in 'XYZ']
print(testlist)
#还可以三层循环，但是很少用
#运用列表生成式，可以写出非常简洁的代码。例如，列出当前目录下的所有文件和目录名，可以通过一行代码实现：
import os
dirlist=[d for d in os.listdir()]#os.listdir可以列出文件和目录
print(dirlist)
print(dirlist[2])

#for循环其实可以同时使用两个甚至多个变量，比如dict的items()可以同时迭代key和value：
d={'x':'A','y':'B','z':'C'}
for k,v in d.items():
    print(k,'=',v)

#列表生成式也可以用两个变量来生成list：
list1=[k+'='+v for k,v in d.items()]
print(list1)

list1=[x for x in range(1,11) if x%2 ==0]
print(list1)
#我们不能在最后的if加上else
# list1=[x for x in range(1,11) if x%2 ==0 else]
# print(list1)
# 这是因为跟在for后面的if是一个筛选条件，不能带else，否则如何筛选？
# 另一些童鞋发现把if写在for前面必须加else
list1=[x if x % 2 == 0 else  0 for x in range(1,11)]
print(list1)

print("在一个列表生成式中，for前面的if ... else是表达式，而for后面的if是过滤条件，不能带else。");

